create table article
(
    id          bigint auto_increment
        primary key,
    title       varchar(256)       null comment '标题',
    content     longtext           null comment '文章内容',
    summary     varchar(1024)      null comment '文章摘要',
    category_id bigint             null comment '所属分类id',
    thumbnail   varchar(256)       null comment '缩略图',
    is_top      char   default '0' null comment '是否置顶（0否，1是）',
    status      char   default '1' null comment '状态（0已发布，1草稿）',
    view_count  bigint default 0   null comment '访问量',
    is_comment  char   default '1' null comment '是否允许评论 1是，0否',
    create_by   bigint             null,
    create_time datetime           null,
    update_by   bigint             null,
    update_time datetime           null,
    del_flag    int    default 0   null comment '删除标志（0代表未删除，1代表已删除）'
)
    comment '文章表';

INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (1, 'SpringBoot框架精讲', 'springboot是spring家族中的一个全新框架，用来简化spring程序的创建和开发过程。在以往我们通过SpringMVC+Spring+Mybatis框架进行开发的时候，我们需要配置web.xml，spring配置，mybatis配置，然后整合在一起，而springboot抛弃了繁琐的xml配置过程，采用大量默认的配置来简化我们的spring开发过程。

SpringBoot化繁为简，使开发变得更加的简单迅速', 'springboot是spring家族中的一个全新框架', 1, 'https://img2.baidu.com/it/u=389128121,3560765504&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800', '1', '0', 437, '1', null, '2023-06-01 15:34:01', null, null, 0);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (2, 'JavaWeb之过滤器Filter', 'web应用启动时，web服务器将创建Filter的实例对象，并调用init方法，读取web.xml的配置，完成对象的初始化功能，
       * 从而为后续的用户请求做好拦截的准备工作（filter对象只会创建一次，init方法也只会执行一次，开发人员通过init的参数，
       * 可或得代表当前filter配置信息的FilterConfig对象', 'Filter是JavaWeb三大组件之一', 1, 'https://www.niaodi.cn/files/system/2021/06-26/0908088a4bc2071690.jpg?version=21.1.4', '1', '0', 1152, '1', null, '2023-06-14 15:34:06', null, null, 0);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (3, 'C++起源', 'C++中的一种派生数据类型，它是由用户定义的若干枚举常量的集合；枚举元素是一个整型，枚举型可以隐式的转换为int型，int型不能隐式的转换为枚举型。', '贝尔实验室20世纪80年代(1979)', 2, 'https://www.niaodi.cn/files/system/2021/06-26/125554aa4bbd227368.png?version=21.1.4', '1', '0', 122, '1', null, '2023-06-01 15:34:09', null, null, 0);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (4, 'Go语言超全详解', '在具体学习go语言的基础语法之前，我们来了解一下go语言出现的时机及其特点。

Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明，他们最终的目标是设计一种适应网络和多核时代的C语言。所以Go语言很多时候被描述为“类C语言”，或者是“21世纪的C语言”，当然从各种角度看，Go语言确实是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸多编程思想。但是Go语言更是对C语言最彻底的一次扬弃，它舍弃了C语言中灵活但是危险的指针运算，还重新设计了C语言中部分不太合理运算符的优先级，并在很多细微的地方都做了必要的打磨和改变', '在具体学习go语言的基础语法之前，我们来了解一下go语言出现的时机及其特点。', 3, 'https://www.niaodi.cn/files/system/2022/03-17/160038664d90783000.png?version=21.1.4', '0', '0', 11, '1', null, '2023-06-28 15:34:12', null, null, 0);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (5, '权限框架使用', '## 课程介绍
![image20211219121555979.png](https://sg-blog-oss.oss-cn-beijing.aliyuncs.com/2022/01/31/e7131718e9e64faeaf3fe16404186eb4.png)

## 0. 简介1

​	**Spring Security** 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架**Shiro**，它提供了更丰富的功能，社区资源也比Shiro丰富。

​	一般来说中大型的项目都是使用**SpringSecurity** 来做安全框架。小项目有Shiro的比较多，因为相比与SpringSecurity，Shiro的上手更加的简单。

​	 一般Web应用的需要进行**认证**和**授权**。

​		**认证：验证当前访问系统的是不是本系统的用户，并且要确认具体是哪个用户**

​		**授权：经过认证后判断当前用户是否有权限进行某个操作**

​	而认证和授权也是SpringSecurity作为安全框架的核心功能。



## 1. 快速入门

### 1.1 准备工作

​	我们先要搭建一个简单的SpringBoot工程

① 设置父工程 添加依赖

~~~~
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
~~~~

② 创建启动类

~~~~
@SpringBootApplication
public class SecurityApplication {

    public static void main(String[] args) {
        SpringApplication.run(SecurityApplication.class,args);
    }
}

~~~~

③ 创建Controller

~~~~java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }
}

~~~~



### 1.2 引入SpringSecurity

​	在SpringBoot项目中使用SpringSecurity我们只需要引入依赖即可实现入门案例。

~~~~xml
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
~~~~

​	引入依赖后我们在尝试去访问之前的接口就会自动跳转到一个SpringSecurity的默认登陆页面，默认用户名是user,密码会输出在控制台。

​	必须登陆之后才能对接口进行访问。



## 2. 认证

### 2.1 登陆校验流程
![image20211215094003288.png](https://sg-blog-oss.oss-cn-beijing.aliyuncs.com/2022/01/31/414a87eeed344828b5b00ffa80178958.png)', 'SpringSecurity框架教程-Spring Security+JWT实现项目级前端分离认证授权', 1, 'https://www.niaodi.cn/files/course/2021/07-19/14311756222f495838.png', '1', '0', 105, '0', null, '2022-01-23 23:20:11', null, null, 1);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (8, '焦点访谈丨根植沙海的绿色梦', '![微信截图_20230619102736.png](http://rw8er5hu3.hd-bkt.clouddn.com/202306198788350c394c41df885ae7445e9c8566.png)
# 新闻速报
## 最新消息
6月17日是世界防治荒漠化和干旱日。习近平总书记不久前在内蒙古自治区巴彦淖尔市考察，主持召开加强荒漠化综合防治和推进“三北”等重点生态工程建设座谈会并发表重要讲话。总书记指出，荒漠化是影响人类生存和发展的全球性重大生态问题。我国是世界上荒漠化最严重的国家之一，荒漠化土地主要分布在三北地区，而且荒漠化地区与经济欠发达区、少数民族聚居区等高度耦合。长期以来，我国将防治荒漠化作为重要战略任务，采取了一系列行之有效的举措，重点治理区实现从“沙进人退”到“绿进沙退”的历史性转变，保护生态与改善民生步入良性循环。
', '6月17日是世界防治荒漠化和干旱日。习近平总书记不久前在内蒙古自治区巴彦淖尔市考察', 2, 'http://rw8er5hu3.hd-bkt.clouddn.com/202306199b6b24d50f96451896e693b3b6d96286.png', '0', '0', 0, '0', 1, '2023-06-19 02:41:46', 1, '2023-06-19 02:41:46', 1);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (9, '我国高技术制造业持续快速增长', '制造业高端化、智能化、绿色化不断深入。国产大飞机成功商业化运行，神舟十六号载人飞船发射圆满成功。前5个月，规模以上航空航天器及设备制造业增加值、智能车载设备制造业增加值同比分别增长25.9%和33%。

　　产业迈向高端化的同时，智能化的带动作用不断增强。随着信息技术、大数据、人工智能等广泛应用，我国数字经济发展较快。1—5月份，工业控制计算机及系统产品产量增长33.4%。', '央视网消息（新闻联播）：今年以来，我国产业升级发展势头不减，技术含量较高、附加值较高的高技术制造业持续保持较快增长，进一步壮大了实体经济发展根基。', 1, 'http://rw8er5hu3.hd-bkt.clouddn.com/20230619c9e4014b26ab455e946796a725da8300.png', '0', '0', 0, '0', 1, '2023-06-19 02:44:43', 1, '2023-06-19 02:44:43', 1);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (10, '贵阳暴雨地铁喷水池站真成“喷水池”1111', '当天5时45分，贵阳市公共交通投资运营集团有限公司官方公众号“贵阳交运”发布运营公告表示，经贵阳地铁专业人员处置，贵阳地铁1号线喷水池站积水已得到控制，现恢复运营。1111', '6月19日凌晨，网上有消息称，因贵阳持续降雨，地铁喷水池站成“喷水池”，积水灌入地铁站。网传视频显示，地铁站内，不少雨水通过地铁站扶梯倒灌进入地铁站', 1, 'http://rw8er5hu3.hd-bkt.clouddn.com/20230619f9a54d812f0a4a9bb8b7e4212c1f2cc2.png', '1', '0', 0, '0', 1, '2023-06-19 02:47:43', null, '2023-06-19 08:51:46', 1);
INSERT INTO blog.article (id, title, content, summary, category_id, thumbnail, is_top, status, view_count, is_comment, create_by, create_time, update_by, update_time, del_flag) VALUES (11, '青春', '新华社北京6月18日电 题: 青春，在复兴征程上闪闪发光——写在中国共产主义青年团第十九次全国代表大会召开之际

新华社记者黄玥、徐壮、张研

火热的六月，将迎来青春的盛会。中国共产主义青年团第十九次全国代表大会将于6月19日启幕。

1500多名来自全国各地的团十九', '在复兴征程上闪闪发光——写在中国共产主义青年团第十九次全国代表大会召开之际', 1, 'http://rw8er5hu3.hd-bkt.clouddn.com/20230619ee5afb01aeef4befbbcedb93c32cec9b.png', '1', '0', 0, '0', 1, '2023-06-19 08:54:50', 1, '2023-06-19 08:54:50', 1);
